package com.javasm.task.cronTask;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

//定时任务
@Component
public class TimeTask {// 定时任务默认是串行任务,因为ThreadPoolTaskScheduler线程池中只有一个线程数.

    /**串行任务与并行任务:
     * 默认多任务之间是串行的,因为ThreadPoolTaskScheduler线程池中只有一个线程数.
     * 如何达到并行任务:
     *      1.扩大ThreadPoolTaskScheduler线程数,application.yml中配置: spring.task.scheduling.pool.size=10
     *      2.使用@Async来注解定时任务,达到异步定时任务效果.
     * 这种方式,在项目不使用,此方式无法管理任务状态(运行,停止)
     */

    //cron表达式来定义任务的执行时间规律  *: 任意值  ?: 不指定  ,: 列出枚举值使用,分隔 示例5,20表示分别在5分钟和20分钟触发一次 -：指定范围 5-20表示从5分钟到20分钟之间每隔一分钟触发一次
    //秒 分 时 日 月 周                /：每隔多久执行一次  0/5:每隔5秒执行一次
    @Async
    @Scheduled(cron = "0 * 4,5,6,7 * * ?")
    public void CronTask(){
        System.out.println("间隔5秒执行一次的task1..."+Thread.currentThread().getName());// Thread.currentThread().getName() 当前线程数
    }

    @Async
    @Scheduled(cron = "0 * 4,5,6,7 * * ?")
    public void task2(){
        System.out.println("间隔3秒执行一次的task2..."+Thread.currentThread().getName());
    }

}
